package primitiveTests;

import org.junit.Before;
import org.junit.Test;

import primitives.cluster.ClusterHead;
import primitives.cluster.IClusterLevel;
import primitives.graph.Graph;
import primitives.graph.Node;
import search.fitnessfunctions.SimpleXorFitnessFunction;

public class XorFitnessTest {
	Node a, b, c, d, e, f;
	Graph g;

	ClusterHead ch;

	@Before
	public void setup() {
		g = new Graph();
		a = new Node("a");
		b = new Node("b");
		c = new Node("c");
		d = new Node("d");
		e = new Node("e");
		f = new Node("f");

		g.addNode(a);
		g.addNode(b);
		g.addNode(c);
		g.addNode(d);
		g.addNode(e);
		g.addNode(f);
		ch = new ClusterHead(g);
		IClusterLevel c1, c2;
		try {
			// c1 = ClusterUtils.lookup(ch, 0);
			// c2 = ClusterUtils.lookup(ch, 1);
			// ClusterUtils.merge(ch, c1, c2);
		} catch (Exception e) {
			System.exit(-1);
		}

	}

	@Test
	public void testUnconnectedGraph() {
		SimpleXorFitnessFunction ft = new SimpleXorFitnessFunction();
		ft.setTree(ch);
		System.out.println(ft.evaluate(ch));

	}

	@Test
	public void testConnectedXorTrue() {
		for (IClusterLevel c : ch.getChildren()) {
			if (c.contains(a))
				System.out.println(c.getIDs() + " has a");
			for (Node n : c.getNodes()) {
				System.out.println(c.getIDs() + " has " + n.getLabel());
			}

		}
		g.connect(a, c);
		g.connect(a, f);
		SimpleXorFitnessFunction ft = new SimpleXorFitnessFunction();
		ft.setTree(ch);
		System.out.println(ft.evaluate(ch));

	}

}
